package com.trt.eatmeat.test;
//给你一个只包含 '(' 和 ')' 的字符串，找出最长有效（格式正确且连续）括号子串的长度。
//
//
//
//
//
// 示例 1：
//
//
//输入：s = "(()"
//输出：2
//解释：最长有效括号子串是 "()"
//
//
// 示例 2：
//
//
//输入：s = ")()())"
//输出：4
//解释：最长有效括号子串是 "()()"
//
//
// 示例 3：
//
//
//输入：s = ""
//输出：0
//
//
//
//
// 提示：
//
//
// 0 <= s.length <= 3 * 10⁴
// s[i] 为 '(' 或 ')'
//
//
//
// Related Topics 栈 字符串 动态规划 👍 1671 👎 0

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;

//leetcode submit region begin(Prohibit modification and deletion)
public class Solution2 {
    public int longestValidParentheses(String s) {
        Map<Character,Integer> map = new HashMap<>();
        map.put('(',-1);
        map.put(')',1);
        List<String> result = new ArrayList<>();

        Stack stack = new Stack();
        for (int i=0;i<s.length();i++){
            if(stack.empty()){
                stack.push(i);
                continue;
            }
            // statck 中的位置
            int startPost = (int)stack.peek();
            char obj = s.charAt(startPost);
            if(obj=='(' && map.get(s.charAt(i))==map.get(obj)*(-1)){
                stack.pop();
                //放入字串
                result.add(s.substring(startPost,i+1));
            }else {
                stack.push(i);
            }
        }


        TreeMap<Integer,List<String>> resultMap= result.stream().collect(Collectors.groupingBy(String::length,TreeMap::new,Collectors.toList()));
        if(resultMap.isEmpty()){
            return 0;
        }
        System.out.println( resultMap.lastEntry().getValue().get(0));
        return  resultMap.lastEntry().getValue().get(0).length();
    }

    public static void main(String[] args) {
        Solution2 solution  = new Solution2();
       int flag= solution.longestValidParentheses(")");
       System.out.println(flag);
    }
}
//leetcode submit region end(Prohibit modification and deletion)
